/**********************************************************************************************************
                                天穹飞控 —— 致力于打造中国最好的多旋翼开源飞控
                                Github: github.com/loveuav/BlueSkyFlightControl
                                技术讨论：bbs.loveuav.com/forum-68-1.html
 * @文件     drv_spi.c
 * @说明     SPI驱动
 * @版本  	 V1.0.1
 * @作者     BlueSky
 * @网站     bbs.loveuav.com
 * @日期     2018.05
**********************************************************************************************************/
#include "drv_spi.h"

void SPI_Init(void)
{
    MX_SPI1_Init();
    MX_SPI2_Init();
    MX_SPI4_Init();
    MX_SPI6_Init();
}

/**********************************************************************************************************
*函 数 名: SPI_GyroEnable
*功能说明: 陀螺仪CS脚使能
*形    参: 无
*返 回 值: 无
**********************************************************************************************************/
void SPI_GyroEnable(void)
{
    HAL_GPIO_WritePin(GYRO_CS_GPIO, GYRO_CS_PIN, 0);
}

/**********************************************************************************************************
*函 数 名: SPI_GyroDisable
*功能说明: 陀螺仪CS脚失能
*形    参: 无
*返 回 值: 无
**********************************************************************************************************/
void SPI_GyroDisable(void)
{
    HAL_GPIO_WritePin(GYRO_CS_GPIO, GYRO_CS_PIN, 1);
}

/**********************************************************************************************************
*函 数 名: SPI_GyroSingleWrite
*功能说明: 陀螺仪单个寄存器写入
*形    参: 寄存器地址 写入值
*返 回 值: 无
**********************************************************************************************************/
void SPI_GyroSingleWrite(uint8_t reg, uint8_t value)
{
    SPI_GyroEnable();
    HAL_SPI_Transmit(&GYRO_SPI, &reg, 1, 10);
    HAL_SPI_Transmit(&GYRO_SPI, &value, 1, 10);
    SPI_GyroDisable();
}

/**********************************************************************************************************
*函 数 名: SPI_GyroMultiRead
*功能说明: 陀螺仪多个寄存器读出
*形    参: 寄存器地址 读出缓冲区 读出长度
*返 回 值: 无
**********************************************************************************************************/
void SPI_GyroMultiRead(uint8_t reg, uint8_t *data, uint8_t length)
{
    reg = reg|0x80;
    SPI_GyroEnable();
    HAL_SPI_Transmit(&GYRO_SPI, (&reg), 1, 10);
    HAL_SPI_Receive(&GYRO_SPI, data, length, HAL_MAX_DELAY);
    SPI_GyroDisable();
}
